/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package br.uerj.jms.usuario;

import br.uerj.swing.TelaInicial;
import javax.jms.JMSException;
import javax.jms.MessageConsumer;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.Topic;
import javax.jms.TopicConnection;
import javax.jms.TopicConnectionFactory;
import javax.naming.InitialContext;
import javax.naming.NamingException;

/**
 *
 * @author Felipe Ribeiro
 */
public class SubscriberUsuario {

    public static void receberMensagem() throws NamingException, JMSException {
        
        // Instancia um serviço de nomes - JNDI
        InitialContext ic = new InitialContext();
        // Acesso à fábrica de conexões JMS
        TopicConnectionFactory factory = (TopicConnectionFactory) ic.lookup("jms/Fabrica");
        // Inscrição no tópico JMS
        Topic topic = (Topic) ic.lookup("jms/tabelas");
        // Estabelece a conexão JMS
        TopicConnection connection = factory.createTopicConnection();
        // Cria uma sessão JMS
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        // Variável que irá comsumir as mensagens
        MessageConsumer receiver = session.createConsumer(topic, "(modo = 'resposta')");
        // Inicializa a conexão
        connection.start();
        // Aguardando mensagens
        System.out.println("LOG: Usuário aguardando mensagens...");
        // Recebendo as mensagens
        TextMessage message = (TextMessage) receiver.receive();

        while (message != null) {
            String query = message.getText();
            TelaInicial.texto.append(query);
            TelaInicial.texto.append("\n");
            message = (TextMessage) receiver.receive(1000);
        }

        // fechando
        receiver.close();
        session.close();
        connection.close();
    }
}
